home *** CD-ROM | disk | FTP | other *** search
- 1000 '12ドットフォントエディタ for TownsOS
- 1010 'DS-MoonRabbit Version 1.00a
- 1020 'Copyright (c) 1994 Delmonta all rights reserved.
- 1030 '
- 1040 'メモリなどの基本的な初期化
- 1050 CLEAR ,,,120000,0,0
- 1060 DEFLNG A-Z 'TOWNSだからすべてlongとして差し支えないだろう
- 1070 ON ERROR GOTO *ERRTRAP
- 1080 DIM FONTDATA&(&H1B000/4) '編集するフォントデータ
- 1090 DIM BUTTON(10,3) 'ボタンアイテムの座標
- 1100 DEF FNBADJIS(H,L) = (H<&H21 OR H>&H20+47 OR L<&H21 OR L>&H7E)
- 1110 '↑JISコードの範囲外かどうか調べる
- 1130 'コンソールを使用してタイトルを表示
- 1140 COLOR 7,0,,4:CLS:CONSOLE 0,24,2 'コンソール画面の最小限の初期化
- 1150 ISCONSOLE = 1
- 1160 PRINT "12ドットフォントエディタ for TownsOS"
- 1170 PRINT "DS-MoonRabbit Version 1.00a"
- 1180 PRINT "Copyright (c) 1994 Delmonta all rights reserved."
- 1190 PRINT
- 1200 FILENAME$=""
- 1210 LINE INPUT "編集するファイル名:",FILENAME$
- 1220 IF FILENAME$="" THEN FILENAME$="\sysinit\system.fnt"
- 1230 ERRCODE = 0
- 1240 LOAD@ FILENAME$,FONTDATA&
- 1250 IF ERRCODE=-1 THEN 1230 ELSE IF ERRCODE THEN 1200
- 1260 '画面初期化
- 1270 ISCONSOLE = 0
- 1280 SCREEN @0:SCREEN 0
- 1290 VIEW (0,0)-(1023,511) : WINDOW (0,0)-(1023,511)
- 1300 RESTORE *SCRINI_PALETTETABLE:FOR I=0 TO 15 'パレット初期化
- 1310 *SCRINI_PALETTETABLE
- 1320 DATA 0, 0, 0, 0, 0, 8, 0, 8, 0, 0, 8, 8
- 1330 DATA 8, 0, 0, 8, 0, 8, 8, 8, 0, 11,11,11
- 1340 DATA 4, 4, 4, 4, 4,15, 4,15, 4, 4,15,15
- 1350 DATA 15, 4, 4, 15, 0,15, 15,15, 4, 15,15,15
- 1360 READ G,R,B:PALETTE I,[G*17,R*17,B*17]
- 1370 NEXT I
- 1380 CONSOLE 0,24,2
- 1390 COLOR ,%9:CLS
- 1400 MOUSE 0
- 1410 MOUSE 4,0,0,639,479
- 1420 MOUSE 1,320,240,1
- 1430 '画面描画
- 1440 'ボタンアイテム
- 1450 LINE (608,1)-(638,31),PSET,%7,BF
- 1460 SYMBOL (616,8),"×",1,1,%0 'ボタンアイテム#0 - MoonRabbit終了
- 1470 BUTTON(0,0) = 608 : BUTTON(0,1) = 1
- 1480 BUTTON(0,2) = 638 : BUTTON(0,3) = 31
- 1490 COLOR ,%7
- 1500 SYMBOL (336,96),"↑",1,1,%0,0,OPAQUE 'ボタンアイテム#1 - 前の部分へ
- 1510 BUTTON(1,0) = 335 : BUTTON(1,1) = 95
- 1520 BUTTON(1,2) = 352 : BUTTON(1,3) = 112
- 1530 LINE (335,95)-(352,112),PSET,%7,B
- 1540 SYMBOL (336,336),"↓",1,1,%0,0,OPAQUE 'ボタンアイテム#2 - 次の部分へ
- 1550 BUTTON(2,0) = 335 : BUTTON(2,1) = 335
- 1560 BUTTON(2,2) = 352 : BUTTON(2,3) = 352
- 1570 LINE (335,335)-(352,352),PSET,%7,B
- 1580 SYMBOL (64,32),"保存(S)",1,1,%0,0,OPAQUE 'ボタンアイテム#3 - データの保存
- 1590 BUTTON(3,0) = 63 : BUTTON(3,1) = 31
- 1600 BUTTON(3,2) = 120 : BUTTON(3,3) = 48
- 1610 LINE (63,31)-(120,48),PSET,%7,B
- 1620 SYMBOL (136,32),"再編集(L)",1,1,%0,0,OPAQUE 'ボタンアイテム#4 - 再編集
- 1630 BUTTON(4,0) = 135 : BUTTON(4,1) = 31
- 1640 BUTTON(4,2) = 208 : BUTTON(4,3) = 48
- 1650 LINE (135,31)-(208,48),PSET,%7,B
- 1660 SYMBOL (536,336),"文字指定(C)",1,1,%0,0,OPAQUE 'ボタンアイテム#5-文字指定
- 1670 BUTTON(5,0) = 535 : BUTTON(5,1) = 335
- 1680 BUTTON(5,2) = 624 : BUTTON(5,3) = 352
- 1690 LINE (535,335)-(624,352),PSET,%7,B
- 1700 BUTTON_NUM = 6 'ボタンアイテムは全部で6個
- 1710 FOR I=0 TO BUTTON_NUM-1 'ボタンアイテムの枠を表示
- 1720 STARTX = BUTTON(I,0)
- 1730 STARTY = BUTTON(I,1)
- 1740 ENDX = BUTTON(I,2)
- 1750 ENDY = BUTTON(I,3)
- 1760 GOSUB *PULLBUTTON
- 1770 NEXT
- 1780 '一覧表
- 1790 LINE (64,96)-(320,352),PSET,%0,BF
- 1800 LINE (64,96)-(320,352),PSET,%1,B
- 1810 SYMBOL (68,80),"0 1 2 3 4 5 6 7 8 9 A B C D E F",1,1,%1
- 1820 PAGENUM = 0 : GOSUB *PUTPAGE
- 1830 '方眼
- 1840 LINE (384-1,112-1)-STEP(12*16+1,12*16+1),PSET,%0,B
- 1850 EDITCHAR = &H41 : GOSUB *PUTCHAR_LARGE
- 1860 'メインルーチン
- 1870 *MAIN
- 1880 WHILE MOUSE(2,0)=-1 : WEND '既に左ボタンが押されていたら離されるまで待つ
- 1890 A$="" : WHILE MOUSE(2,0)=0 AND A$="" : A$=INKEY$ : WEND
- 1900 IF A$="" THEN *MAIN_ENDKB
- 1910 ON INSTR(" SsLlCc",A$)\2 GOSUB *DISKSAVE,*DISKLOAD,*SETCODE
- 1920 WHILE INKEY$<>"" : WEND
- 1930 GOTO *MAIN
- 1940 *MAIN_ENDKB
- 1950 X = MOUSE(0)
- 1960 Y = MOUSE(1)
- 1970 FOR I=0 TO BUTTON_NUM-1
- 1980 IF BUTTON(I,0)<=X AND X<=BUTTON(I,2) AND BUTTON(I,1)<=Y AND Y<=BUTTON(I,3) THEN
- 1990 STARTX = BUTTON(I,0)
- 2000 STARTY = BUTTON(I,1)
- 2010 ENDX = BUTTON(I,2)
- 2020 ENDY = BUTTON(I,3)
- 2030 GOSUB *CHKBUTTON
- 2040 IF RETFLAG THEN ON I+1 GOSUB *EXIT,*PREVPAGE,*NEXTPAGE,*DISKSAVE,*DISKLOAD,*SETCODE
- 2050 I = BUTTON_NUM 'forループから抜け出す
- 2060 ENDIF
- 2070 NEXT
- 2080 IF I=BUTTON_NUM+1 THEN *MAIN 'ボタンアイテムが処理された場合はここで終了
- 2090 '↑NEXT文で常にI++される。ボタンアイテムでなければこのときI=BUTTON_NUM
- 2100 IF 64<X AND X<320 AND 96<Y AND Y<352 THEN GOSUB *DRAG : GOTO *MAIN
- 2110 '↑一覧表からのドラッグ ↓エディット画面からのドラッグ
- 2120 IF 432<X AND X<448 AND 80<Y AND Y<96 THEN GOSUB *DRAG : GOTO *MAIN
- 2130 IF 384<=X AND X<576 AND 112<=Y AND Y<304 THEN GOSUB *EDIT : GOTO *MAIN
- 2140 GOTO *MAIN
- 2150 'ドットパターンの編集
- 2160 *EDIT
- 2170 X = (X-384)\16 : Y = (Y-112)\16
- 2180 IF EDITCHAR<&H100 AND X>=6 THEN RETURN '半角は横6ドット
- 2190 LINE (384+X*16,112+Y*16)-STEP(15,15),XOR,%(15 XOR 1),BF
- 2200 PSET (434+X,82+Y),%(15 XOR 1),XOR
- 2210 RETURN
- 2220 'ドラッグ&ドロップ
- 2230 *DRAG
- 2240 DIM DRAG_DOTPATN&(127),DRAG_ANDPATN&(31)
- 2250 '文字パターンを作業領域に移す
- 2260 IF X<320 THEN '一覧表からのドラッグ
- 2270 X = (X-64)\16
- 2280 Y = (Y-96)\16
- 2290 CHAR = Y*16 + X + PAGENUM*256
- 2300 IF PAGENUM>0 AND Y>=8 THEN CHAR = CHAR+128
- 2310 X = X*16 + 64 + 2
- 2320 Y = Y*16 + 96 + 2
- 2330 ELSE '方眼の上の原寸表示部からのドラッグ
- 2340 X = 434
- 2350 Y = 82
- 2360 CHAR = -1
- 2370 ENDIF
- 2380 GET@A (X,Y)-(X+11,Y+11),DRAG_DOTPATN&
- 2390 LINE (640,0)-(671,31),PSET,%0,BF
- 2400 PUT@A (640,0)-(651,11),DRAG_DOTPATN&
- 2410 'マウスカーソルのパターンを変更する
- 2420 GET@A (640,0)-(671,31),DRAG_DOTPATN&
- 2430 GET@ (640,0)-(671,31),DRAG_ANDPATN&,%0
- 2440 MOUSE 1,,,0
- 2450 IF CHAR>=256 OR (CHAR=-1 AND EDITCHAR>=256) THEN X=6 ELSE X=3
- 2460 MOUSE 6,1,DRAG_ANDPATN&,DRAG_DOTPATN&,X,6
- 2470 MOUSE 1,,,1
- 2480 'ボタンが離されるまで待つ
- 2490 WHILE MOUSE(2,0) : WEND
- 2500 'マウスカーソルを元に戻す
- 2510 X = MOUSE(0)
- 2520 Y = MOUSE(1)
- 2530 MOUSE 0
- 2540 MOUSE 4,0,0,639,479
- 2550 MOUSE 1,X,Y,1
- 2560 '文字パターンのコピー
- 2570 IF 384<X AND X<576 AND 112<Y AND Y<304 THEN '方眼へのドラッグ
- 2580 IF CHAR>=0 THEN EDITCHAR = CHAR : GOSUB *PUTCHAR_LARGE
- 2590 ELSE IF 64<X AND X<320 AND 96<Y AND Y<352 THEN '一覧表へのドラッグ
- 2600 CHAR = (X-64)\16 + (Y-96 AND -16)
- 2610 IF CHAR>=128 AND PAGENUM>0 THEN CHAR = CHAR+128
- 2620 CHAR = CHAR + PAGENUM*256
- 2630 IF PAGENUM>0 AND FNBADJIS(CHAR\256,CHAR AND 255) THEN
- 2640 '一覧表中の空欄にドラッグしようとした
- 2650 ELSE IF PAGENUM THEN 'ドラッグ先は全角
- 2660 GET@ (640,0)-(651,11),DRAG_ANDPATN&,%15
- 2670 A = ((CHAR\256 - &H21)*94 + (CHAR MOD 256 - &H21))*6 + &H300
- 2680 FOR I=0 TO 5
- 2690 FONTDATA&(A+I) = DRAG_ANDPATN&(I)
- 2700 NEXT
- 2710 ELSE 'ドラッグ先は半角
- 2720 GET@ (640,0)-(645,11),DRAG_ANDPATN&,%15
- 2730 FOR I=0 TO 2
- 2740 FONTDATA&(CHAR*3+I) = DRAG_ANDPATN&(I)
- 2750 NEXT
- 2760 ENDIF
- 2770 STARTX = (X AND -16) + 2
- 2780 STARTY = (Y AND -16) + 2
- 2790 GOSUB *PUTCHAR
- 2800 ENDIF
- 2810 ERASE DRAG_DOTPATN&,DRAG_ANDPATN&
- 2820 RETURN
- 2830 '終了
- 2840 *EXIT
- 2850 END
- 2860 '前のページへ
- 2870 *PREVPAGE
- 2880 IF PAGENUM=0 THEN RETURN 'すでに半角が表示されていたらそのまま
- 2890 PAGENUM = PAGENUM-2
- 2900 IF PAGENUM<&H21 THEN PAGENUM=0
- 2910 GOSUB *PUTPAGE
- 2920 RETURN
- 2930 '次のページへ
- 2940 *NEXTPAGE
- 2950 IF PAGENUM=&H21+46 THEN RETURN '46/47区が表示されていたらそのまま
- 2960 IF PAGENUM=0 THEN PAGENUM = &H21 ELSE PAGENUM = PAGENUM+2
- 2970 GOSUB *PUTPAGE
- 2980 RETURN
- 2990 'ディスクにデータを書き込む
- 3000 *DISKSAVE
- 3010 ERRCODE = -2 'KILL文でのエラーは無視
- 3020 KILL FILENAME$
- 3030 ERRCODE = 0
- 3035 SAVE@ FILENAME$,FONTDATA&
- 3040 IF ERRCODE=-1 THEN GOTO *DISKSAVE
- 3050 RETURN
- 3060 'ディスクからデータを読み込む
- 3070 *DISKLOAD
- 3080 ERRCODE = 0
- 3090 LOAD@ FILENAME$,FONTDATA&
- 3100 IF ERRCODE=-1 THEN GOTO *DISKLOAD
- 3110 IF ERRCODE=0 THEN GOSUB *PUTPAGE
- 3120 RETURN
- 3130 '編集する文字の指定
- 3140 *SETCODE
- 3150 CONSOLE 19,1,2
- 3160 COLOR 7,,,4 'コンソールの文字の色はパレットでは指定できない
- 3170 *SETCODE_REP
- 3180 LOCATE 0,19
- 3190 A$="" : LINE INPUT "編集する文字/JISコード:",A$
- 3200 PRINT
- 3210 IF A$="" THEN GOTO *SETCODE_END 'リターンキー空打ち - 中止
- 3220 IF KLEN(A$)>1 AND KLEN(A$,2)=0 THEN CHAR=VAL("&H"+A$) ELSE CHAR=JIS(A$)
- 3230 IF CHAR>=256 AND FNBADJIS(CHAR\256,CHAR MOD 256) THEN *SETCODE_REP
- 3240 EDITCHAR = CHAR : GOSUB *PUTCHAR_LARGE
- 3250 *SETCODE_END
- 3260 CONSOLE 0,24,2
- 3270 RETURN
- 3280 '一覧表を再表示する
- 3290 '<in> PAGENUM : ページ番号(表示する文字のJISコード上位8ビット)
- 3300 '<out> なし
- 3310 '<break> STARTX,STARTY,CHAR,[TMPX,TMPY]
- 3320 *PUTPAGE
- 3330 CHAR = PAGENUM*256
- 3340 FOR STARTY=98 TO 98+15*16 STEP 16
- 3350 COLOR ,%9
- 3360 SYMBOL (32,STARTY-2),RIGHT$("000"+HEX$(CHAR),4),1,1,%1,0,OPAQUE
- 3370 FOR STARTX=66 TO 66+15*16 STEP 16
- 3380 GOSUB *PUTCHAR
- 3390 CHAR = CHAR+1
- 3400 IF PAGENUM>0 AND (CHAR AND 128) THEN CHAR = CHAR+128
- 3410 NEXT
- 3420 NEXT
- 3430 RETURN
- 3440 '方眼に文字を表示する
- 3450 '<in> EDITCHAR : 文字のASCIIコード/JIS漢字コード
- 3460 '<out>
- 3470 '<break> STARTX,STARTY,CHAR,[TMPX,TMPY]
- 3480 *PUTCHAR_LARGE
- 3490 STARTX=434 : STARTY=82 : CHAR=EDITCHAR : GOSUB *PUTCHAR
- 3500 DIM PUTC_L_BUF&(23) '原寸表示から方眼部へ拡大コピー
- 3510 GET@A (434,82)-(434+11,82+11),PUTC_L_BUF&
- 3520 PUT@A (384,112)-(384+11,112+11),PUTC_L_BUF&,PSET,16,16
- 3530 ERASE PUTC_L_BUF&
- 3540 FOR STARTY=0 TO 11 '方眼の各ドットの右下を色違いにする
- 3550 FOR STARTX=0 TO 11
- 3560 PSET (384+STARTX*16+15,112+STARTY*16+15),%(15 XOR 1),XOR
- 3570 NEXT
- 3580 NEXT
- 3590 COLOR ,%9
- 3600 SYMBOL (384,80),RIGHT$("000"+HEX$(EDITCHAR),4),1,1,%1,0,OPAQUE
- 3610 EDITCHAR = CHAR
- 3620 RETURN
- 3630 '12ドットの文字を表示する
- 3640 '<in> STARTX,STARTY : 表示する位置
- 3650 ' CHAR : 表示する文字のASCIIコード/JIS漢字コード
- 3660 '<out> -
- 3670 '<break> TMPX,TMPY
- 3680 *PUTCHAR
- 3690 DIM PUTC_BUF&(5)
- 3700 IF CHAR<&H100 THEN
- 3710 FOR TMPX=0 TO 2
- 3720 PUTC_BUF&(TMPX) = FONTDATA&(CHAR*3 + TMPX)
- 3730 NEXT
- 3740 COLOR ,%1
- 3750 PUT@ (STARTX,STARTY)-(STARTX+5,STARTY+11),PUTC_BUF&,OPAQUE,%15
- 3760 LINE (STARTX+6,STARTY)-(STARTX+11,STARTY+11),PSET,%0,BF
- 3770 ELSE
- 3780 TMPX= CHAR\256
- 3790 TMPY = CHAR MOD 256
- 3800 IF FNBADJIS(TMPX,TMPY) THEN
- 3810 LINE (STARTX,STARTY)-(STARTX+11,STARTY+11),PSET,%0,BF
- 3820 ELSE
- 3830 TMPY = ((TMPX-&H21)*94 + TMPY-&H21)*6 + 3*256
- 3840 FOR TMPX=0 TO 5
- 3850 PUTC_BUF&(TMPX) = FONTDATA&(TMPY+TMPX)
- 3860 NEXT
- 3870 COLOR ,%1
- 3880 PUT@ (STARTX,STARTY)-(STARTX+11,STARTY+11),PUTC_BUF&,OPAQUE,%15
- 3890 ENDIF
- 3900 ENDIF
- 3910 ERASE PUTC_BUF&
- 3920 RETURN
- 3930 '画面上のボタンアイテムが左クリックされたときに呼び出すルーチン
- 3940 '<in> STARTX,STARTY,ENDX,ENDY :ボタンアイテムの位置(常に始点<終点)
- 3950 '<out> RETFLAG :1ならクリックとする、0ならキャンセル
- 3960 '<break> TMPX,TMPY
- 3970 *CHKBUTTON
- 3980 GOSUB *PUSHBUTTON
- 3990 WHILE MOUSE(2,0):WEND 'マウスボタンが放されるまで待つ
- 4000 TMPX=MOUSE(0) : TMPY=MOUSE(1)
- 4010 IF STARTX<=TMPX AND TMPX<=ENDX AND STARTY<=TMPY AND TMPY<=ENDY THEN RETFLAG=1 ELSE RETFLAG=0
- 4020 GOSUB *PULLBUTTON
- 4030 RETURN
- 4040 '画面上のボタンアイテムをへこませる
- 4050 '<in> STARTX,STARTY,ENDX,ENDY :ボタンアイテムの位置
- 4060 '<out> <break> -
- 4070 *PUSHBUTTON
- 4080 LINE (STARTX-1,STARTY-1)-(ENDX +1,ENDY+1),PSET,%0,B
- 4090 LINE (ENDX +1,ENDY +1)-(STARTX-1,ENDY +1),PSET,%15
- 4100 LINE (ENDX +1,ENDY +1)-(ENDX +1,STARTY-1),PSET,%15
- 4110 RETURN
- 4120 'へこませた画面上のボタンアイテムを元に戻す
- 4130 '<in> <out> <break> *PUSHBUTTONと同じ
- 4140 *PULLBUTTON
- 4150 LINE (STARTX-1,STARTY-1)-(ENDX +1,ENDY +1),PSET,%0,B
- 4160 LINE (STARTX-1,STARTY-1)-(STARTX-1,ENDY +1),PSET,%15
- 4170 LINE (STARTX-1,STARTY-1)-(ENDX +1,STARTY-1),PSET,%15
- 4180 RETURN
- 4190 'エラー処理ルーチン
- 4195 *ERRTRAP
- 4200 IF ERRCODE=-2 THEN ERRCODE=0 : RESUME NEXT
- 4210 RESTORE *ERRMES_TABLE
- 4220 *ERRTRAP_REP
- 4230 READ ERRCODE,ERRMES$
- 4240 IF ERRCODE=-1 THEN GOTO *ERRTRAP_ENDREP
- 4250 IF ERRCODE=ERR THEN GOSUB *DISKERR : RESUME NEXT
- 4260 GOTO *ERRTRAP_REP
- 4270 *ERRTRAP_ENDREP
- 4280 A$ = "システムエラー(" + STR$(ERR) + ") 強制終了します"
- 4290 IF ISCONSOLE THEN
- 4300 PRINT A$
- 4310 PRINT "何かキーを押してください..."
- 4320 WHILE INKEY$="" : WEND
- 4330 ELSE
- 4340 SYMBOL (0,400),A$,1,1,%1,,PSET
- 4350 STARTX = 591
- 4360 STARTY = 415
- 4370 ENDX = 624
- 4380 ENDY = 432
- 4390 COLOR ,%7
- 4400 SYMBOL (STARTX-1,STARTY-1),"確認",1,1,%0,,OPAQUE
- 4410 LINE (STARTX,STARTY)-(ENDX,ENDY),PSET,%7,B
- 4420 GOSUB *PULLBUTTON
- 4430 *ERRTRAP_MOUSEREP
- 4440 WHILE MOUSE(2,0) : WEND
- 4450 WHILE MOUSE(2,0)=0 : WEND
- 4460 X = MOUSE(0)
- 4470 Y = MOUSE(1)
- 4480 IF X<STARTX OR ENDX<X OR Y<STARTY OR ENDY<Y THEN GOTO *ERRTRAP_ENDREP
- 4490 GOSUB *CHKBUTTON
- 4500 IF RETFLAG=0 THEN GOTO *ERRTRAP_MOUSEREP
- 4510 ENDIF
- 4520 END
- 4530 *ERRMES_TABLE
- 4540 DATA 55,"ファイル名の記述に誤りがあります"
- 4550 DATA 60,"指定の入出力装置は使用できません"
- 4560 DATA 63,"指定のファイルが見つかりません"
- 4570 DATA 65,"ディスクのディレクトリ領域に空きがありません"
- 4580 DATA 67,"ディスクに空き領域がありません"
- 4590 DATA 72,"指定されたディスク装置が使用可能な状態になっていません"
- 4600 DATA 73,"指定されたディスクは書き込みが禁止されています"
- 4610 DATA 75,"デバイスまたはファイルのアクセスが拒否されました"
- 4620 DATA -1,""
- 4630 'ディスクエラー対策
- 4640 '<out> ERRCODE -1:Retry, 0:Ignore, 1-255:Fail
- 4650 *DISKERR
- 4660 ERRMES$ = "ディスクエラー(" + STR$(ERR) + ") " + ERRMES$
- 4670 IF ISCONSOLE THEN
- 4680 PRINT ERRMES$
- 4690 *DISKERR_CONS_REP
- 4700 LINE INPUT "A:中止,R:再試行,I:無視して続行 :",ERRMES$
- 4710 IF LEN(ERRMES$)<>1 OR INSTR("AaFfRrIi",ERRMES$)=0 THEN GOTO *DISKERR_CONS_REP
- 4720 IF ERRMES$="R" OR ERRMES$="r" THEN ERRCODE=-1
- 4730 IF ERRMES$="I" OR ERRMES$="i" THEN ERRCODE=0
- 4740 ELSE
- 4750 SYMBOL (0,384),ERRMES$,1,1,%1,0,PSET
- 4760 STARTY = 415
- 4770 ENDY = 432
- 4780 FOR ERR_I=0 TO 2
- 4790 STARTX = 447 + ERR_I*64
- 4800 ENDX = STARTX + 49
- 4810 LINE (STARTX,STARTY)-(ENDX,ENDY),PSET,%7,BF
- 4820 SYMBOL (STARTX+1,STARTY+1),MID$(" 中止 再試行 無視 ",ERR_I*6+1,6),1,1,%0,,PSET
- 4830 GOSUB *PULLBUTTON
- 4840 NEXT
- 4850 *DISKERR_REP
- 4860 WHILE MOUSE(2,0) : WEND
- 4870 WHILE MOUSE(2,0)=0 : WEND
- 4880 ERR_X = MOUSE(0) - 447
- 4890 ERR_Y = MOUSE(1)
- 4900 IF ERR_Y<STARTY OR ENDY<ERR_Y THEN GOTO *DISKERR_REP
- 4910 IF ERR_X<0 OR 64*3<=ERR_X OR (ERR_X AND 63)>49 THEN GOTO *DISKERR_REP
- 4920 ERR_X = ERR_X\64
- 4930 STARTX = 447 + ERR_X*64
- 4940 ENDX = STARTX + 49
- 4950 GOSUB *CHKBUTTON
- 4960 IF RETFLAG=0 THEN GOTO *DISKERR_REP
- 4970 LINE (0,384)-(639,433),PSET,%9,BF
- 4980 IF ERR_X=1 THEN ERRCODE=-1 ELSE IF ERR_X=2 THEN ERRCODE=0
- 4990 ENDIF
- 5000 RETURN
-